#pragma once

#include "MBDataTypes.h"

// OpenCV
#include <opencv2/opencv.hpp>

/**
  *	An MBMatrix3x3 is a conventional 3x3 matrix consisting of double values
  */
class MBMatrix3x3
{
	friend class MBCameraView;
	friend class MBTriangle;

public:
	MBMatrix3x3( const double &diagonalElem = 1.0 );
	MBMatrix3x3( const double *values );
	MBMatrix3x3( const double &v11, const double &v12, const double &v13,
				 const double &v21, const double &v22, const double &v23,
				 const double &v31, const double &v32, const double &v33 );

	const double &At( const MBuint &row, const MBuint &col ) const;
	const cv::Mat &GetCVMatrix( void ) const;

	MBMatrix3x3 operator*( const MBMatrix3x3 &other ) const;

	void Print( void ) const;

private:
	MBMatrix3x3( const cv::Mat &matrix );

	/** The OpenCV matrix the MBMatrix3x3 object uses as data structure to store the values */
	cv::Mat mMatrix;
};